// =============================================================================
// | 包: models                                                              |
// | 功能: 定义应用程序的数据模型，映射数据库表结构                           |
// =============================================================================
package models

import (
	"blog_server/models/enum" // 枚举包 - 提供角色类型定义
	"time"                    // 时间包 - 提供时间相关功能
)

// =============================================================================
// | 结构体: UserModel                                                       |
// | 功能: 用户数据模型                                                      |
// | 说明: 映射数据库中的用户表，存储用户基本信息                             |
// |----------------------------------------------------------------------------|
// | 字段: Model - Model - 基础模型，包含ID、CreatedAt、UpdatedAt字段         |
// | 字段: Username - string - 用户名，最大长度32字符                         |
// | 字段: Nickname - string - 用户昵称，最大长度32字符                       |
// | 字段: Avatar - string - 用户头像URL，最大长度256字符                     |
// | 字段: Abstract - string - 用户简介，最大长度256字符                       |
// | 字段: RegisterSource - int8 - 用户注册来源                               |
// | 字段: CodeAge - int - 用户码龄                                           |
// | 字段: Password - string - 用户密码，加密存储，不JSON序列化                |
// | 字段: Email - string - 用户邮箱，最大长度256字符                          |
// | 字段: OpenID - string - 第三方登录唯一标识，最大长度64字符                |
// | 字段: Role - enum.RoleType - 用户角色类型枚举值                          |
// =============================================================================
type UserModel struct {
	Model                        // 嵌入基础模型，提供公共字段
	Username       string        `gorm:"size:32" json:"username"`  // 用户名，登录凭证
	Nickname       string        `gorm:"size:32" json:"nickname"`  // 用户昵称，显示名称
	Avatar         string        `gorm:"size:256" json:"avatar"`   // 头像URL
	Abstract       string        `gorm:"size:256" json:"abstract"` // 个人简介
	RegisterSource int8          `json:"registerSource"`           // 注册来源
	CodeAge        int           `json:"codeAge"`                  // 码龄（年）
	Password       string        `gorm:"size:64" json:"-"`         // 密码（不返回给前端）
	Email          string        `gorm:"size:256" json:"email"`    // 电子邮箱
	OpenID         string        `gorm:"size:64" json:"openID"`    // 第三方登录唯一标识
	Role           enum.RoleType `json:"role"`                     // 用户角色类型
}

// =============================================================================
// | 结构体: UserConfModel                                                   |
// | 功能: 用户配置数据模型                                                  |
// | 说明: 映射数据库中的用户配置表，存储用户个性化设置                       |
// |----------------------------------------------------------------------------|
// | 字段: UserID - uint - 用户ID，唯一标识，与UserModel关联                   |
// | 字段: UserModel - UserModel - 关联的用户模型，不JSON序列化               |
// | 字段: LikeTags - []string - 用户喜欢的标签列表，JSON格式存储             |
// | 字段: UpdateUsernameDate - *time.Time - 上次修改用户名的时间             |
// | 字段: OpenCollect - bool - 是否公开用户收藏                              |
// | 字段: OpenFollow - bool - 是否公开用户关注                              |
// | 字段: OpenFans - bool - 是否公开用户粉丝                                |
// | 字段: HomeStyleID - uint - 用户主页样式ID                                |
// =============================================================================
type UserConfModel struct {
	UserID             uint       `gorm:"unique" json:"userID"`                          // 用户ID，唯一标识
	UserModel          UserModel  `gorm:"foreignKey:UserID" json:"-"`                    // 关联的用户模型
	LikeTags           []string   `gorm:"type:longtext;serializer:json" json:"likeTags"` // 喜欢的标签列表
	UpdateUsernameDate *time.Time `json:"updateUsernameDate"`                            // 上次修改用户名时间
	OpenCollect        bool       `json:"openCollect"`                                   // 是否公开收藏
	OpenFollow         bool       `json:"openFollow"`                                    // 是否公开关注
	OpenFans           bool       `json:"openFans"`                                      // 是否公开粉丝
	HomeStyleID        uint       `json:"homeStyleID"`                                   // 主页样式ID
}
